package com.sicheng.蓝桥.练习题.基础数论;

import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

/**
 * @author zsc
 * @version 1.0
 * @date 2022/5/5 11:06
 */
public class 约数之和 {
    /**
     * 给定 n 个正整数 ai，请你输出这些数的乘积的约数之和，答案对 109+7 取模。
     * <p>
     * 输入格式
     * 第一行包含整数 n。
     * <p>
     * 接下来 n 行，每行包含一个整数 ai。
     * <p>
     * 输出格式
     * 输出一个整数，表示所给正整数的乘积的约数之和，答案需对 109+7 取模。
     * <p>
     * 数据范围
     * 1≤n≤100,
     * 1≤ai≤2×109
     * 输入样例：
     * 3
     * 2
     * 6
     * 8
     * 输出样例：
     * 252
     * <p>
     * <p>
     * 算法分析
     * 基本思想：
     * 如果 N=p1^c1∗p2^c2∗…∗pk^ck
     * 约数个数：(c1+1)∗(c2+1)∗…∗(ck+1)(c1+1)∗(c2+1)∗…∗(ck+1)
     * 约数之和： (p1^0+p1^1+…+p1^c1)∗…∗(pk^0+pk^1+…+pk^ck)
     */

    public static void main(String[] args) {
        long mod = (long) (1e9 + 7);

        HashMap<Integer, Integer> map = new HashMap<>();
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();

        long res = 1;

        while (n-- > 0) {
            long x = scanner.nextLong();
            for (int i = 2; i <= x / i; i++) {
                while (x % i == 0) {
                    x /= i;
                    map.put(i, map.getOrDefault(i, 0) + 1);
                }
            }
            if (x > 1) {
                map.put((int) x, map.getOrDefault((int) x, 0) + 1);
            }
        }

        for (Map.Entry<Integer, Integer> entry : map.entrySet()) {
            int a = entry.getKey();
            int k = entry.getValue();
            long t = 1;
            while (k-- > 0)
                t = (t * a + 1) % mod;
            res = res * t % mod;
        }

        System.out.println(res);


    }


}
